home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
WINDOWS
/
PROFFT.ARJ
/
PROFFTDB.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1992-04-27
|
31KB
|
828 lines
/****************************************************************************
PROFFTDB.CPP Denne filen inneholder (i denne rekkef°lgen):
*****************************************************************************
TOptions::TOptions(PTWindowsObject AParent, LPSTR AName)
: TDialog(AParent, AName)
void TOptions::WMInitDialog(RTMessage Msg)
void TOptions::IDHScrollBar(RTMessage)
void TOptions::WMHScroll(RTMessage Msg)
void TOptions::WMCommand(RTMessage Msg)
void TOptions::CloseWindow(int iRetValue)
TProgressDialog::TProgressDialog(PTWindowsObject AParent, LPSTR lpszDialogName,
LPSTR lpszCaption) : TDialog(AParent, lpszDialogName)
TProgressDialog::~TProgressDialog()
void TProgressDialog::WMInitDialog(RTMessage Msg)
void TProgressDialog::WMSetText(RTMessage Msg)
void TProgressDialog::WMSetProgress(RTMessage Msg)
void TProgressDialog::WMCommand(RTMessage)
BOOL TProgressDialog::CancelPressed()
LPSTR alpTitle[6] = {"Lowpass", "Highpass", "Bandpass", "Bandstop", "Butterworth highpass", "Butterworth lowpass"};
TFilter2::TFilter2(PTWindowsObject AParent, LPSTR AName)
: TDialog(AParent, AName)
void TFilter2::UpdateParent()
void TFilter2::WMInitDialog(RTMessage Msg)
void TFilter2::WMHScroll(RTMessage Msg)
void TFilter2::IDHScrollBar1(RTMessage Msg)
void TFilter2::IDHScrollBar2(RTMessage Msg)
void TFilter2::IDEditFrequency1(RTMessage Msg)
void TFilter2::IDEditFrequency2(RTMessage Msg)
BOOL TFilter2::CanClose()
TFilter1::TFilter1(PTWindowsObject AParent, LPSTR AName)
: TDialog(AParent, AName)
void TFilter1::UpdateParent()
void TFilter1::WMInitDialog(RTMessage Msg)
void TFilter1::IDHScrollBar(RTMessage Msg)
void TFilter1::WMHScroll(RTMessage Msg)
void TFilter1::IDEditFrequency(RTMessage Msg)
BOOL TFilter1::CanClose()
void TComplexWindow::ExecuteSmallDialog()
void TComplexWindow::ExecuteLargeDialog()
****************************************************************************/
#include <owl.h>
#include <dialog.h>
#include <edit.h>
#include <scrollba.h>
#include <checkbox.h>
#include <radiobut.h>
#include <dir.h>
#include <string.h>
#include <math.h>
#include <stdio.h>
#pragma hdrstop
#include "profftid.h" // Symbolske konstanter
#include "profft.h" // Klassedefinisjoner
TOptions::TOptions(PTWindowsObject AParent, LPSTR AName)
: TDialog(AParent, AName)
/****************************************************************************
Dette er dialogboksen som lar brukeren forandre pσ standardopsjonene i programmet.
Allokerer objektene i dialogboksen. Sender parametrene videre til
superklassen som henter dialogboksen fra ressursfilen.
PTWindowsObject AParent Peker til foreldreobjektet.
LPSTR AName Navnet pσ dialogboksen i ressursfilen.
Kodet av: MK 20.04.92
*****************************************************************************/
{
new TScrollBar(this, DB_SCROLLRUBBER);
new TRadioButton(this, DB_RADIOCIRCLERUBBER, NULL);
new TRadioButton(this, DB_RADIOSQUARERUBBER, NULL);
new TCheckBox(this, DB_TOGGLESHIFTCENTER, NULL, NULL);
}
void TOptions::WMInitDialog(RTMessage Msg)
/****************************************************************************
Setter standardverdiene i dialogboksen.
RTMessage Msg Sendes videre til superklassen.
Kodet av: MK 20.04.92
*****************************************************************************/
{
char acMax[10];
char acTemp[3];
int iSize;
TDialog::WMInitDialog(Msg);
iSize=((TMainWindow *)Parent)->GetRubberSize();
wsprintf(acTemp, "%i", iSize);
SetDlgItemText(HWindow, DB_TEST, acTemp);
// Setter maks/min verdier for viskelµret og nσvµrende posisjon pσ
// scrollbaren.
SetScrollRange(GetItemHandle(DB_SCROLLRUBBER), SB_CTL, 1, MAX_RUBBER_SIZE, TRUE);
SetScrollPos(GetItemHandle(DB_SCROLLRUBBER), SB_CTL, iSize, TRUE);
// Setter riktig button i dialogboksen m.h.p. type viskelµr
CheckRadioButton(HWindow, DB_RADIOCIRCLERUBBER, DB_RADIOSQUARERUBBER,
bCircleRubber?DB_RADIOCIRCLERUBBER:DB_RADIOSQUARERUBBER);
// Krysser av hvis komplekse bilder sentreres
CheckDlgButton(HWindow, DB_TOGGLESHIFTCENTER, bShiftCenter?1:0);
}
void TOptions::IDHScrollBar(RTMessage)
/****************************************************************************
Mottar beskjed nσ brukeren benytter scrollbaren. Oppdaterer tallverdi
pσ skjermen i dialogboksen.
Kodet av: MK 20.04.92
*****************************************************************************/
{
char acTemp[10];
// Gj°r om tallverdien til tekst og viser teksten.
wsprintf(acTemp, "%d", GetScrollPos(GetItemHandle(DB_SCROLLRUBBER), SB_CTL));
SetDlgItemText(HWindow, DB_TEST, acTemp);
}
void TOptions::WMHScroll(RTMessage Msg)
/****************************************************************************
Mottar beskjed nσ brukeren benytter drar scrollbaren. Oppdaterer tallverdi
pσ skjermen i dialogboksen.
Kodet av: MK 20.04.92
*****************************************************************************/
{
char acTemp[3];
if ((Msg.WParam==SB_THUMBPOSITION) || (Msg.WParam==SB_THUMBTRACK))
{
wsprintf(acTemp, "%d", GetScrollPos(GetItemHandle(DB_SCROLLRUBBER), SB_CTL));
SetDlgItemText(HWindow, DB_TEST, acTemp);
}
TDialog::WMHScroll(Msg);
}
void TOptions::WMCommand(RTMessage Msg)
/****************************************************************************
Mottar beskjed nσ brukeren trykker pσ en av radiobutton knappene. Passer
pσ σ trykke av den av de som ikke blir trykket pσ. (Kan bare velge en
av gangen).
Kodet av: MK 20.04.92
*****************************************************************************/
{
if ((Msg.WParam==DB_RADIOCIRCLERUBBER) || (Msg.WParam==DB_RADIOSQUARERUBBER))
CheckRadioButton(HWindow, DB_RADIOCIRCLERUBBER, DB_RADIOSQUARERUBBER,
Msg.WParam==DB_RADIOCIRCLERUBBER?DB_RADIOCIRCLERUBBER:DB_RADIOSQUARERUBBER);
else
TDialog::WMCommand(Msg);
}
void TOptions::CloseWindow(int iRetValue)
/****************************************************************************
Hvis brukeren trykker pσ OK knappen ta vare pσ verdiene, hvis ikke
forkast de.
Kodet av: MK 20.04.92
*****************************************************************************/
{
// Hvis OK knappen er trykket oppdater verdiene.
if (iRetValue==IDOK)
{
bCircleRubber=IsDlgButtonChecked(HWindow, DB_RADIOCIRCLERUBBER)?TRUE:FALSE;
((TMainWindow *)Parent)->SetRubberSize(GetScrollPos(GetItemHandle(DB_SCROLLRUBBER), SB_CTL));
bShiftCenter=IsDlgButtonChecked(HWindow,DB_TOGGLESHIFTCENTER)?TRUE:FALSE;
}
TDialog::CloseWindow(iRetValue);
}
TProgressDialog::TProgressDialog(PTWindowsObject AParent, LPSTR lpszDialogName,
LPSTR lpszCaption) : TDialog(AParent, lpszDialogName)
/****************************************************************************
Oppretter statusvinduet som viser hvor langt vi er kommet i en tidkrevende
prosess.
PTWindowsObject AParent Peker til foreldreobjektet.
LPSTR lpszDialogName Navnet pσ dialogboksen i ressursfilen.
LPSTR lpszCaption Overskriften pσ vinduet.
Kodet av: MK 20.04.92
*****************************************************************************/
{
// Setter overskriften pσ dialogboksen
SetCaption(lpszCaption);
// Setter startverdier
lSoFar = 0;
bCancel = FALSE;
strcpy(acMessage, "");
// Allokerer kontrollene i dialogboksen
new TStatic(this, DB_TEXT, DB_TEXTLENGTH, NULL);
new TStatic(this, DB_PERCENTAGE, 5, NULL);
new TStatic(this, DB_PAINTAREA, 0, NULL);
}
TProgressDialog::~TProgressDialog()
/****************************************************************************
Frigj°r ressursene som denne dialogboksen har allokert. Disse ressursene
allokeres ikke i konstruktoren, men i WMInitDialog medlemsfunksjonen.
Kodet av: MK 20.04.92
*****************************************************************************/
{
DeleteObject(hBrush);
ReleaseDC(HWindow, hdc);
}
void TProgressDialog::WMInitDialog(RTMessage Msg)
/****************************************************************************
Oppretter og henter data om ressursene som brukes i dialogboksen.
Lager brushen det tegnes med og henter omrσdet som skal males og lagrer
dette i rect.
RTMessage Msg Sendes videre til superklassen.
Kodet av: MK 20.04.92
*****************************************************************************/
{
TDialog::WMInitDialog(Msg);
// Hent og lagre omrσdet som skal fargelegges
hCtrl = GetDlgItem(HWindow, DB_PAINTAREA);
hdc = GetDC(hCtrl);
GetClientRect(hCtrl, &rect);
// Lag brushen som det skal tegnes med i omrσdet som skal fargelegges.
hBrush = CreateSolidBrush(GetSysColor(COLOR_ACTIVECAPTION));
hBrush = SelectObject(hdc, hBrush);
SetROP2(hdc, R2_COPYPEN);
}
void TProgressDialog::WMSetText(RTMessage Msg)
/****************************************************************************
Mottar beskjed fra det aktive objektet om at statusteksten skal forandres.
Denne skifter teksten som vises i dialogboksen.
RTMessage Msg Peker til strengen som skal vises.
Kodet av: MK 20.04.92
*****************************************************************************/
{
SetDlgItemText(HWindow, DB_TEXT, (LPSTR) Msg.LParam);
}
void TProgressDialog::WMSetProgress(RTMessage Msg)
/****************************************************************************
Mottar beskjed fra det aktive objektet om at vi mσ vise hvor langt vi
er kommet hittil.
RTMessage Msg Hvor langt vi er hittil (i % ganger 100).
Kodet av: MK 20.04.92
*****************************************************************************/
{
// Hvis vi har kommet lenger enn vi var sist..
if (Msg.LParam!=lSoFar)
{
lSoFar = Msg.LParam;
// Vis prosentomrσdet og oppdater % teksten.
wsprintf(acPercentage, "%ld%%", lSoFar);
Rectangle(hdc, rect.left, rect.top,
(long) (rect.left + ((rect.right-rect.left)*lSoFar)/100), rect.bottom);
SetDlgItemText(HWindow, DB_PERCENTAGE, acPercentage);
UpdateWindow(hCtrl);
}
}
void TProgressDialog::WMCommand(RTMessage)
/****************************************************************************
Mottar beskjed fra dialogboksen om at brukeren har trykket pσ Cancel
knappen og °nsker σ avbryte den nσvµrende operasjonen.
Kodet av: MK 20.04.92
*****************************************************************************/
{
bCancel = TRUE;
}
BOOL TProgressDialog::CancelPressed()
/****************************************************************************
Sjekker om brukeren har trykket pσ Cancelknappen siden sist vi sjekket.
Returnerer: TRUE Hvis knappet er blitt trykket ned
FALSE Hvis ikke..
RTMessage Msg Peker til strengen som skal vises.
Kodet av: MK 20.04.92
*****************************************************************************/
{
MSG msg;
// Motta kun beskjeder til denne dialogboksen, send de andre
// videre.
while (!bCancel && PeekMessage(&msg, HWindow, 0, 0, PM_REMOVE))
{
if (IsDialogMessage(HWindow, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
// Returner status sσ langt.
return bCancel;
}
// Tabellen under brukes av filterdialogboksene i overskriften for
// σ vise hvilket filter vi holder pσ med.
LPSTR alpTitle[6] = {"Lowpass", "Highpass", "Bandpass", "Bandstop", "Butterworth highpass", "Butterworth lowpass"};
TFilter2::TFilter2(PTWindowsObject AParent, LPSTR AName)
: TDialog(AParent, AName)
/****************************************************************************
Dette er dialogboksen som brukes ved alle filtre som krever to radiuser.
Dvs. CM_FILTERBANDPASS, CM_FILTERBANDSTOPP. Konstruktoren bare setter opp
kontrollene i dialogboksen.
PTWindowsObject AParent Peker til foreldreobjektet. Sendes uber°rt
videre til superklassen.
LPSTR AName Navnet pσ dialogboksen i ressursfilen. Sendes
uber°rt videre til superklassen.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
new TEdit(this, DB_EDITFREQUENCY1, DB_EDITFREQUENCYLENGTH);
new TEdit(this, DB_EDITFREQUENCY2, DB_EDITFREQUENCYLENGTH);
new TScrollBar(this, DB_SCROLLFREQUENCY1);
new TScrollBar(this, DB_SCROLLFREQUENCY2);
}
void TFilter2::UpdateParent()
/****************************************************************************
Denne oppdaterer foreldreobjektet med de rette verdiene som brukeren
velger v.h.a. dialogboksen.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
TComplexWindow *ptWin;
ptWin = ((TComplexWindow *)Parent);
// Setter °vre og nedre radius, ber foreldre vinduet oppdatere seg
// selv, dvs. vise r°de ringer pσ filteret.
ptWin->iLowerValue = GetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY1), SB_CTL);
ptWin->iUpperValue = GetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY2), SB_CTL);
InvalidateRect(ptWin->HWindow, NULL, FALSE);
UpdateWindow(ptWin->HWindow);
}
void TFilter2::WMInitDialog(RTMessage Msg)
/****************************************************************************
Denne initialiserer dialogboksen med de rette verdiene. I tillegg setter
den min/maks verdi pσ scrollbarene.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
char acMax[DB_EDITFREQUENCYLENGTH];
char acTitle[MAX_CAPTION_LENGTH];
RECT rectComplex, rect;
int i;
// Regner ut maksimalverdi som skal til for σ kunne dekke hele boksen
// med en sirkel (ganger radiusen med sqrt(2)).
iMax = ceil(((TComplexWindow *)Parent)->bmpInfo->bmiHeader.biWidth*(1.415/2)); // Maks radius r^2=2*x^2 => r=sqrt(2)*x
TDialog::WMInitDialog(Msg);
// Setter standardverdier pσ filterringene.
wsprintf(acMax, "%d", iMax / 3);
SetDlgItemText(HWindow, DB_EDITFREQUENCY1, acMax);
wsprintf(acMax, "%d", 2*iMax/3);
SetDlgItemText(HWindow, DB_EDITFREQUENCY2, acMax);
// Setter range og startposisjon pσ scrollbarene
SetScrollRange(GetItemHandle(DB_SCROLLFREQUENCY1), SB_CTL, 0, iMax, TRUE);
SetScrollRange(GetItemHandle(DB_SCROLLFREQUENCY2), SB_CTL, 0, iMax, TRUE);
SetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY1), SB_CTL, iMax/3, TRUE);
SetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY2), SB_CTL, (2*iMax)/3, TRUE);
// Setter overskriften pσ filteret ut i fra hvilken type filter
// brukeren har valgt.
lstrcpy(acTitle, alpTitle[((TComplexWindow *)Parent)->iFilterType-CM_FILTERLOWPASS]);
strcat(acTitle, " filter");
SetCaption(acTitle);
// Be foreldrevinduet vise filterringene (de r°de) nσr vinduet fσr
// beskjed om σ vise seg igjen
((TComplexWindow *)Parent)->bShowFilter = TRUE;
// Koden nedenfor fors°ker σ holde dialogboksen unna bildet, hvis mulig
// ved σ plassere boksen rett under det aktive bildet.
GetWindowRect(((TComplexWindow *)Parent)->HWindow, &rectComplex);
GetWindowRect(HWindow, &rect);
i = GetSystemMetrics(SM_CYSCREEN);
i -= rectComplex.top;
i -= ((TComplexWindow *)Parent)->bmpInfo->bmiHeader.biHeight;
i -= rect.bottom-rect.top;
i -= FILTERDIALOGBOXDISTANCE;
if (i>0)
{
MoveWindow(HWindow, rectComplex.left, rectComplex.top+((TComplexWindow *)Parent)->bmpInfo->bmiHeader.biHeight
+GetSystemMetrics(SM_CYCAPTION)+FILTERDIALOGBOXDISTANCE,rect.right-rect.left, rect.bottom-rect.top, TRUE);
}
}
void TFilter2::WMHScroll(RTMessage Msg)
/****************************************************************************
Denne mottar beskjeder hvis brukeren holder tak i scrollbaren og drar.
Denne s°rger for at tallene i dialogboksen og radiusen i foreldrevinduet
hele tiden er oppdatert.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
char acTemp[DB_EDITFREQUENCYLENGTH];
HWND hCtrl;
int nIndex, nCtrlID;
// Hvis brukeren drar i scrollbaren.
if ((Msg.WParam==SB_THUMBPOSITION) || (Msg.WParam==SB_THUMBTRACK))
{
hCtrl = HIWORD(Msg.LParam);
// Regner ut hvilken av scrollbarene brukeren drar i.
nCtrlID = GetWindowWord(hCtrl, GWW_ID);
nIndex = nCtrlID - DB_SCROLLFREQUENCY1;
// Setter riktig dialogboks tall tekst.
wsprintf(acTemp, "%d", GetScrollPos(
GetItemHandle(DB_SCROLLFREQUENCY1+nIndex), SB_CTL));
SetDlgItemText(HWindow, DB_EDITFREQUENCY1+nIndex, acTemp);
}
TDialog::WMHScroll(Msg);
}
#pragma argsused
void TFilter2::IDHScrollBar1(RTMessage Msg)
/****************************************************************************
Denne mottar beskjeder nσr brukeren har forandret pσ den f°rste
scrollbaren, dvs. indre radius pσ et filter. Den sjekker om det er en
lovlig verdi, dvs. nedre verdi mσ vµre mindre eller lik °vre verdi.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
int nTempL, nTempH;
char acTempL[DB_EDITFREQUENCYLENGTH];
// Henter verdiene fra dialogboksen.
nTempL = GetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY1), SB_CTL);
nTempH = GetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY2), SB_CTL);
// Hvis °vre verdi <= nedre verdi
if (nTempH <= nTempL)
{
// Sett nedre verdi = °vre verdi
nTempL = nTempH;
// Oppdater scrollbaren
SetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY1), SB_CTL, nTempL, TRUE);
}
// Oppdater tall teksten i dialogboksen
wsprintf(acTempL, "%d", nTempL);
SetDlgItemText(HWindow, DB_EDITFREQUENCY1, acTempL);
}
#pragma argsused
void TFilter2::IDHScrollBar2(RTMessage Msg)
/****************************************************************************
Denne mottar beskjeder nσr brukeren har forandret pσ den andre
scrollbaren, dvs. yttre radius pσ et filter. Den sjekker om det er en
lovlig verdi, dvs. °vre verdi mσ vµre st°rre eller lik °vre verdi.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
int nTempL, nTempH;
char acTempH[DB_EDITFREQUENCYLENGTH];
// Henter verdiene fra dialogboksen.
nTempL = GetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY1), SB_CTL);
nTempH = GetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY2), SB_CTL);
// Hvis °vre verdi <= nedre verdi
if (nTempH <= nTempL)
{
// Sett °vre verdi = nedre verdi
nTempH = nTempL;
SetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY2), SB_CTL, nTempH, TRUE);
}
// Oppdater tall teksten i dialogboksen
wsprintf(acTempH, "%d", nTempH);
SetDlgItemText(HWindow, DB_EDITFREQUENCY2, acTempH);
}
#pragma argsused
void TFilter2::IDEditFrequency1(RTMessage Msg)
/****************************************************************************
Denne mottar beskjed nσr brukeren skriver inn et tall direkte i den
f°rste radien. Oppdaterer scrollbaren og foreldrevinduet for σ vise den
nye posisjonen.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
int nTemp;
char acTempL[DB_EDITFREQUENCYLENGTH];
GetDlgItemText(HWindow, DB_EDITFREQUENCY1, acTempL, 10);
nTemp = atoi(acTempL);
SetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY1), SB_CTL, nTemp, TRUE);
UpdateParent();
}
#pragma argsused
void TFilter2::IDEditFrequency2(RTMessage Msg)
/****************************************************************************
Denne mottar beskjed nσr brukeren skriver inn et tall direkte i den
andre radien. Oppdaterer scrollbaren og foreldrevinduet for σ vise den
nye posisjonen.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
int nTemp;
char acTempH[DB_EDITFREQUENCYLENGTH];
GetDlgItemText(HWindow, DB_EDITFREQUENCY2, acTempH, 10);
nTemp = atoi(acTempH);
SetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY2), SB_CTL, nTemp, TRUE);
UpdateParent();
}
BOOL TFilter2::CanClose()
/****************************************************************************
Forteller om brukeren kan lukke dialogboksen. Siden verdiene alltid
leses ut fra scrollbarene som alltid har en lovlig verdi, trenger vi
ikke sjekke dette ekstra. Vi kunne eventuellt sjekket at det stσr et
lovlig tall i tallfeltet, men siden filteret hele tiden vises dynamisk
i foreldrevinduet, har vi sett bort i fra dette. "What you see is
what you get.."
Returnerer: TRUE Alltid
Kodet av: SA
Modifisert: MK 22.04.92 Fjernet un°dvendig kode.
*****************************************************************************/
{
return TRUE;
}
TFilter1::TFilter1(PTWindowsObject AParent, LPSTR AName)
: TDialog(AParent, AName)
/****************************************************************************
Dette er dialogboksen som brukes ved alle filtre som krever en radius.
Dvs. CM_FILTERLOWPASS, CM_FILTERHIGHPASS, CM_FILTERBWLOWPASS,
CM_FILTERBWHIGHPASS. Konstruktoren bare setter opp
kontrollene i dialogboksen.
PTWindowsObject AParent Peker til foreldreobjektet. Sendes uber°rt
videre til superklassen.
LPSTR AName Navnet pσ dialogboksen i ressursfilen. Sendes
uber°rt videre til superklassen.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
new TEdit(this, DB_EDITFREQUENCY, DB_EDITFREQUENCYLENGTH);
new TScrollBar(this, DB_SCROLLFREQUENCY);
}
void TFilter1::UpdateParent()
/****************************************************************************
Denne oppdaterer foreldreobjektet med de rette verdiene som brukeren
velger v.h.a. dialogboksen.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
TComplexWindow *ptWin;
ptWin = ((TComplexWindow *)Parent);
ptWin->iLowerValue = GetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY), SB_CTL);
ptWin->iUpperValue = -1; // iUpperValue == -1 indikerer ingen 2. frekvens (°vre/nedre grensefrekvens)
InvalidateRect(((TComplexWindow *)Parent)->HWindow, NULL, FALSE);
UpdateWindow(((TComplexWindow *)Parent)->HWindow);
}
void TFilter1::WMInitDialog(RTMessage Msg)
/****************************************************************************
Denne initialiserer dialogboksen med de rette verdiene. I tillegg setter
den min/maks verdi pσ scrollbarene.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
char acMax[DB_EDITFREQUENCYLENGTH];
char acTitle[MAX_CAPTION_LENGTH];
RECT rectComplex, rect;
int i;
// Regner ut startverdier og setter range pσ scrollbaren.
iMax = ceil(((TComplexWindow *)Parent)->bmpInfo->bmiHeader.biWidth*(1.415/2)); // Maks radius r^2=2*x^2 => r=sqrt(2)*x
wsprintf(acMax, "%d", iMax / 2);
TDialog::WMInitDialog(Msg);
SetDlgItemText(HWindow, DB_EDITFREQUENCY, acMax);
SetScrollRange(GetItemHandle(DB_SCROLLFREQUENCY), SB_CTL, 0, iMax, TRUE);
SetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY), SB_CTL, 0, TRUE);
lstrcpy(acTitle, alpTitle[((TComplexWindow *)Parent)->iFilterType-CM_FILTERLOWPASS]);
strcat(acTitle, " filter");
SetCaption(acTitle);
((TComplexWindow *)Parent)->bShowFilter = TRUE;
// Koden nedenfor fors°ker σ holde dialogboksen unna bildet, hvis mulig ved σ plassere
// boksen rett under det aktive bildet.
GetWindowRect(((TComplexWindow *)Parent)->HWindow, &rectComplex);
GetWindowRect(HWindow, &rect);
i = GetSystemMetrics(SM_CYSCREEN);
i -= rectComplex.top;
i -= ((TComplexWindow *)Parent)->bmpInfo->bmiHeader.biHeight;
i -= rect.bottom-rect.top;
i -= FILTERDIALOGBOXDISTANCE;
if (i>0)
{
MoveWindow(HWindow, rectComplex.left, rectComplex.top+((TComplexWindow *)Parent)->bmpInfo->bmiHeader.biHeight
+GetSystemMetrics(SM_CYCAPTION)+FILTERDIALOGBOXDISTANCE,rect.right-rect.left, rect.bottom-rect.top, TRUE);
}
}
#pragma argsused
void TFilter1::IDHScrollBar(RTMessage Msg)
/****************************************************************************
Denne mottar beskjeder nσr brukeren har forandret pσ
scrollbaren, dvs. indre radius pσ et filter.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
int nTemp;
char acTemp[DB_EDITFREQUENCYLENGTH];
// Setter riktig verdi i editkontrollen
nTemp = GetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY), SB_CTL);
wsprintf(acTemp, "%d", nTemp);
SetDlgItemText(HWindow, DB_EDITFREQUENCY, acTemp);
}
void TFilter1::WMHScroll(RTMessage Msg)
/****************************************************************************
Denne mottar beskjeder hvis brukeren holder tak i scrollbaren og drar.
Denne s°rger for at tallene i dialogboksen og radiusen i foreldrevinduet
hele tiden er oppdatert.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
char acTemp[DB_EDITFREQUENCYLENGTH];
if ((Msg.WParam==SB_THUMBPOSITION) || (Msg.WParam==SB_THUMBTRACK))
{
wsprintf(acTemp, "%d", GetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY), SB_CTL));
SetDlgItemText(HWindow, DB_EDITFREQUENCY, acTemp);
}
TDialog::WMHScroll(Msg);
}
#pragma argsused
void TFilter1::IDEditFrequency(RTMessage Msg)
/****************************************************************************
Denne mottar beskjed nσr brukeren skriver inn et tall direkte i edit
kontrollen. Oppdaterer scrollbaren og foreldrevinduet for σ vise den
nye posisjonen.
Kodet av: SA
Modifisert: MK 22.04.92 La inn dynamisk oppdatering av editkontrollene
og oppdatering av foreldrevinduet.
*****************************************************************************/
{
int nTemp;
char acTemp[DB_EDITFREQUENCYLENGTH];
GetDlgItemText(HWindow, DB_EDITFREQUENCY, acTemp, 10);
nTemp = atoi(acTemp);
SetScrollPos(GetItemHandle(DB_SCROLLFREQUENCY), SB_CTL, nTemp, TRUE);
UpdateParent();
}
BOOL TFilter1::CanClose()
/****************************************************************************
Forteller om brukeren kan lukke dialogboksen. Siden verdiene alltid
leses ut fra scrollbarene som alltid har en lovlig verdi, trenger vi
ikke sjekke dette ekstra. Vi kunne eventuellt sjekket at det stσr et
lovlig tall i tallfeltet, men siden filteret hele tiden vises dynamisk
i foreldrevinduet, har vi sett bort i fra dette. "What you see is
what you get.."
Returnerer: TRUE Alltid
Kodet av: SA
Modifisert: MK 22.04.92 Fjernet un°dvendig kode.
*****************************************************************************/
{
return TRUE;
}
void TComplexWindow::ExecuteSmallDialog()
/****************************************************************************
Starter opp den lille dialogboksen som brukes for de filtrene som
krever en radius (CM_FILTERLOWPASS, CM_FILTERHIGHPASS, CM_FILTERBWLOWPASS,
CM_FILTERBWHIGHPASS). Denne sjekker om verdiene som returneres er ok og
om brukeren avsluttet filterdialogboksen med OK knappen f°r den starter
filtreringen.
Fordi om dette er en medlemsfunksjon av TComplexWindow objektet og kanskje
h°rer hjemme i COMPWIN.CPP modulen, valgte vi og samle de har sammen med
de andre dialogboksene i systemet.
Kodet av: MK 22.04.92
*****************************************************************************/
{
TFilter1 *tdFilter1;
// Instansiererer dialogboksen.
tdFilter1 = new TFilter1(this, "FILTER1");
if (tdFilter1==NULL)
MessageBox(HWindow, "TComplexWindow::ExecuteSmallDialog tdFilter1 == NULL",
ERROR_CAPTION, MB_ERROR);
else
{
// Utf°rer dialogboksen og sjekker returverdiene og om brukeren
// avsluttet med OK knappen.
if ((GetApplication()->ExecDialog(tdFilter1)==IDOK)
&& (iLowerValue!=iUpperValue))
// Starter filtreringen.
PrepareToExecuteFilter();
else
{
// Hvis ikke fjern filtermarkeringen fra foreldrevinduet og
// returner pσ vanlig mσte.
bShowFilter = FALSE;
InvalidateRect(HWindow, NULL, FALSE);
}
}
}
void TComplexWindow::ExecuteLargeDialog()
/****************************************************************************
Starter opp den store dialogboksen som brukes for de filtrene som
krever to radiuser (CM_FILTERBANDPASS, CM_FILTERBANDSTOP).
Denne sjekker om verdiene som returneres er ok og
om brukeren avsluttet filterdialogboksen med OK knappen f°r den starter
filtreringen.
Fordi om dette er en medlemsfunksjon av TComplexWindow objektet og kanskje
h°rer hjemme i COMPWIN.CPP modulen, valgte vi og samle de har sammen med
de andre dialogboksene i systemet.
Kodet av: MK 22.04.92
*****************************************************************************/
{
TFilter2 *tdFilter2;
// Instansiererer dialogboksen.
tdFilter2 = new TFilter2(this, "FILTER2");
if (tdFilter2==NULL)
MessageBox(HWindow, "TComplexWindow::ExecuteLargeDialog tdFilter2==NULL",
ERROR_CAPTION, MB_ERROR);
else
{
// Utf°rer dialogboksen og sjekker returverdiene og om brukeren
// avsluttet med OK knappen.
if ((GetApplication()->ExecDialog(tdFilter2)==IDOK)
&& (iLowerValue!=iUpperValue))
// Starter filtreringen.
PrepareToExecuteFilter();
else
{
// Hvis ikke fjern filtermarkeringen fra foreldrevinduet og
// returner pσ vanlig mσte.
bShowFilter = FALSE;
InvalidateRect(HWindow, NULL, FALSE);
}
}
}